/* --------------------------------------------------------- * * __________ D E L T A S C R I P T * * (_________() * * / === / - A fast, dynamic scripting language * * | == | - Version 4.13.11.0 * * / === / - Developed by Adam R. Nelson * * | = = | - 2011-2013 * * / === / - Distributed under GNU LGPL v3 * * (________() - http://github.com/ar-nelson/deltascript * * * * --------------------------------------------------------- */ package com.sector91.delta.script.test.doctest; import static org.junit.Assert.*; import java.io.File; import java.util.List; import java.util.Scanner; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameters; import org.pegdown.PegDownProcessor; import org.pegdown.ast.RootNode; import com.sector91.delta.script.DScriptContext; import com.sector91.delta.script.DScriptErr; import com.sector91.delta.script.test.util.LabelledParameterized; import com.sector91.util.A; @RunWith(LabelledParameterized.class) public class DocTestRunner { public static final String DOC_PATH = "src/main/markdown/"; private static final DScriptContext CONTEXT = new DScriptContext(); @Parameters public static List<Object[]> parameters() { // Load the doc files. return recursiveDocScan(new File(DOC_PATH)); } private static List<Object[]> recursiveDocScan(File f) { final List<Object[]> list = A.list(); if (f.isDirectory()) { for (File item : f.listFiles()) list.addAll(recursiveDocScan(item)); } else if (f.isFile() && f.getName().endsWith(".md")) { System.out.println("Parsing file: " + f.getName()); try { final Scanner s = new Scanner(f, "UTF-8"); final String fileText = s.useDelimiter("\\Z").next(); s.close(); final PegDownProcessor processor = new PegDownProcessor(); final RootNode node = processor.parseMarkdown( fileText.toCharArray()); final TestExtractorVisitor visitor = new TestExtractorVisitor( f.getName(), CONTEXT); node.accept(visitor); for (DocTest test : visitor.getTests()) list.add(new Object[] {test.getName(), test}); } catch (Exception ex) { System.out.println("!! Error reading file !!"); ex.printStackTrace(System.out); } } return list; } private final DocTest test; public DocTestRunner(String label, DocTest testToRun) {test = testToRun;} @Test public final void doctest() throws DScriptErr { try {test.runTest();} catch (DocTest.DocTestFailureException ex) {fail(ex.getMessage());} } }